﻿using CavinatorService.DAO;
using CavinatorService.Model;
using NDatabase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CavinatorService.Business
{
    public class ItemService
    {
        #region Atributos

        private ItemMapper mapper;
        private AnswerMapper mapperAnswer;

        #endregion

        #region Construtor

        public ItemService()
        {
            mapper = new ItemMapper();
            mapperAnswer = new AnswerMapper();
        }

        #endregion

        #region Métodos

        /// <summary>
        /// Atualiza um item
        /// </summary>
        /// <param name="registro">Dados do item</param>
        public void Atualizar(Item registro)
        {
            mapper.Atualizar(registro);
        }

        /// <summary>
        /// Insere um item e suas respostas
        /// </summary>
        /// <param name="registro">Dados do item</param>
        public void Inserir(Item registro)
        {
            Item item = mapper.BuscarItem(registro.Value);

            if (item.Id == 0)
            {
                int id = mapper.InserirItem(registro);

                foreach (Answer a in registro.Answers)
                {
                    a.IdItem = id;
                }

                mapperAnswer.InserirLote(registro.Answers);

                OdbFactory.Delete("Cavinator.db");
            }
        }

        /// <summary>
        /// Exclui um item
        /// </summary>
        /// <param name="id">Id do item</param>
        public void Excluir(int id)
        {
            mapper.Excluir(id);
        }

        /// <summary>
        /// Lista os itens e suas respostas
        /// </summary>
        /// <returns>Lista de itens</returns>
        public List<Item> Listar()
        {
            List<Item> Itens = mapper.Listar();
            List<Answer> Answers = mapperAnswer.Listar();

            foreach (Answer a in Answers)
            {
                foreach (Item i in Itens)
                {
                    if (i.Id == a.IdItem)
                        i.Answers.Add(a);
                }
            }

            return Itens;
        }

        #endregion
    }
}
